﻿
#include"TandS.h"
#include"file.h"
#include"menu.h"
#include"options.h"
extern pTec Thead;//定义指向教师的指针
extern pStu Shead;//定义指向学生的指针


//修改学生密码
pStu changeSpasswd(pStu Shead)
{
    pStu temp=Shead->next;
    Account act;
    char *input;
    char *input1;
    puts("请输入需修改密码的{用户名]");
    scanf("%s",act.name);
    input=getpass("请输入原始密码:");    //输入密码
    strcpy(act.passwd,input);
    
    for(;temp!=NULL;temp=temp->next)
		{
			if(0==strcmp(temp->data.name,act.name))
				{
				    if(0==strcmp(temp->data.passwd,act.passwd))
				    {
				        do
   				        {
				            input=getpass("请输入新密码:");
				            input1=getpass("请确认新密码:");
				        }while(0!=strcmp(input,input1));
				 
				        strcpy(temp->data.passwd,input);
				        puts("修改密码成功，下次启动生效");
				        sleep(2);
				        break;
				    }
		        }
		 }
        if(temp==NULL)
		{
              puts("输入的用户不存在");
              sleep(1);	
		}
	return Shead;
}

//修改教师密码
pTec changeTpasswd(pTec Thead)
{
    pTec temp=Thead->next;
    Account act;
    char *input;
    char *input1;
    puts("请输入需修改密码的{用户名]");
    scanf("%s",act.name);
    input=getpass("请输入原始密码:");    //输入密码
    strcpy(act.passwd,input);
    
    for(;temp!=NULL;temp=temp->next)
		{
			if(0==strcmp(temp->data.name,act.name))
				{
				    if(0==strcmp(temp->data.passwd,act.passwd))
				    {
				        do
   				        {
				            input=getpass("请输入新密码:");
				            input1=getpass("请确认新密码:");
				        }while(0!=strcmp(input,input1));
				 
				        strcpy(temp->data.passwd,input);
				        puts("修改密码成功，下次启动生效");
				        sleep(2);
				        break;
				    }
		        }
		 }
        if(temp==NULL)
		{
              puts("输入的用户不存在");
              sleep(1);	
		}
    return Thead;
}
//查看学生信息
void checkSinfo(pStu Shead)
{
    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无信息打印\n");
        return;
    }
    
    pStu temp=Shead->next;
    printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    printf("┃  班 级  ┃   姓 名   ┃  年 龄  ┃  生/日  ┃\n");
    printf("┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┃\n");
    for(;temp!=NULL;temp=temp->next)
    {
        printf("┃ %s  ┃%s\t     ┃ %d\t┃   %2d.%2d  ┃\n",temp->data.id,temp->data.name,temp->data.age,temp->data.bmonth,temp->data.bday);
    
    }
    printf("╚┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╝\n ");
    sleep(5);//dado
    return ;
}
//查看教师信息
void checkTinfo(pTec Thead)
{
   if(Thead==NULL||Thead->next==NULL)
    {
        printf("无信息打印\n");
        return;
    }
    char a[6]="SH1610";
    pTec temp=Thead->next;
    printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    printf("┃ 管理班级 ┃   姓 名   ┃  年 龄  ┃  生/日  ┃\n");
    printf("┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┃\n");
    for(;temp!=NULL;temp=temp->next)
    {
       printf("┃ %s  ┃%s\t     ┃ %d\t┃   %2d.%2d  ┃\n",a,temp->data.name,temp->data.age,temp->data.bmonth,temp->data.bday);
    
    }
    printf("╚┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╝\n ");

    sleep(5);//dado
    return ;
}

//修改教师信息
void changeTinfo(pTec Thead)
{
    Account act;
	char  *input=NULL;
    
	puts("请输入[用户名]");
	scanf("%s",act.name);
	
	pTec temp=Thead->next;
    for(;temp!=NULL;temp=temp->next)
	{
	    if(0==strcmp(temp->data.name,act.name))
			{
			    input=getpass("请输入密码:");    //输入密码
	            strcpy(act.passwd,input);		
				if(0==strcmp(temp->data.passwd,act.passwd))
				   {
				      printf("请输入[年龄][生日-月][生日-天]\n");
				      scanf("%d%d%d",&temp->data.age,&temp->data.bmonth,&temp->data.bday);
	                  puts("信息已完善");
	                  sleep(1);//dado
	                    break;
					}
					else
					{
					    puts("密码输入错误，请重新登录");
					    sleep(1);
					    break;
					}
		    }
	 }
	 if(temp==NULL)
	   {
	        puts("无此用户");
	        sleep(1);
	   }
    return ;
}
//修改学生信息
void changeSinfo(pStu Shead)
{
    Account act;
    char* input=NULL;
	puts("请输入[用户名]");
	scanf("%s",act.name);
	
	pStu temp=Shead->next;
    for(;temp!=NULL;temp=temp->next)
	{
	    if(0==strcmp(temp->data.name,act.name))
			{
			    input=getpass("请输入密码:");    //输入密码
	            strcpy(act.passwd,input);		
				if(0==strcmp(temp->data.passwd,act.passwd))
				   {
				      printf("请输入[年龄][生日-月][生日-天]\n");
				      scanf("%d%d%d",&temp->data.age,&temp->data.bmonth,&temp->data.bday);
	                  puts("信息已完善");
	                  sleep(1);//dado
	                    break;
					}
					else
					{
					    puts("密码输入错误，请重新登录");
					    sleep(1);
					    break;
					}
		    }
	 }
	 if(temp==NULL)
	   {
	        puts("无此用户");
	        sleep(1);
	   }
    return ;
}
//录入学生成成绩
void addgrades(pStu Shead)
{
    Student stu; 
	puts("请输入录入成绩的[用户名]");
	scanf("%s",stu.data.name);
	
	pStu temp=Shead->next;
    for(;temp!=NULL;temp=temp->next)
	{
	    if(0==strcmp(temp->data.name,stu.data.name))
			{
				      printf("请输入[Linux][C Program][project]的成绩\n");
				      scanf("%d%d%d",&temp->g_lin,&temp->g_c,&temp->g_pro);
	                  puts("成绩录入完成");
	                  sleep(1);//dado
	                    break;
			}
					
	
	 }
	 if(temp==NULL)
	   {
	        puts("无此用户");
	        sleep(1);
	   }

    return ;
}
//修改学生成成绩
void changegrades(pStu Shead)
{
    Student stu;
    
	puts("请输入修改成绩的[用户名]");
	scanf("%s",stu.data.name);
	
	pStu temp=Shead->next;
    for(;temp!=NULL;temp=temp->next)
	{
	    if(0==strcmp(temp->data.name,stu.data.name))
			{
				      printf("请输入[Linux][C Program][project]的成绩\n");
				      scanf("%d%d%d",&temp->g_lin,&temp->g_c,&temp->g_pro);
	                  puts("成绩修改完成");
	                  sleep(1);//dado
	                    break;
			}
	 }
	 if(temp==NULL)
	   {
	        puts("无此用户");
	        sleep(1);
	   }
    return ;
}

//查看个人成绩
void checkonegrades(pStu Sheah)
{   
    Student stu;
	puts("请输入查看成绩的[用户名]");
	scanf("%s",stu.data.name);
	
	pStu temp=Shead->next;
    for(;temp!=NULL;temp=temp->next)
	{
	    if(0==strcmp(temp->data.name,stu.data.name))
			{
				printf("[name]\t[Linux]\t[C Program]\t[project]\n"); 
				printf(" %s\t  %d\t    %d\t           %d\n",temp->data.name,temp->g_lin,temp->g_c,temp->g_pro);
				sleep(3);//dado
				break;
		    }
    }
    if(temp==NULL)
	   {
	        puts("无此用户");
	        sleep(2);
	   }
    return ;
}
//产看所有成绩
void checkallgrades(pStu Sheah)
{
    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无信息可查\n");
        return;
    }
    
    pStu temp=Shead->next;
    printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    printf("┃  姓 名  ┃   Linux   ┃  C Program  ┃  project  ┃\n");
    printf("┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┃\n");
    for(;temp!=NULL;temp=temp->next)
    {
        printf("┃  %s\t      %d  \t  %d  \t        %d \t┃\n",temp->data.name,temp->g_lin,temp->g_c,temp->g_pro);
    
    }
    printf("╚┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╝\n ");
    sleep(3);//dado
    return ;

}
//查看单科排名
void checkonerank(pStu Shead)
{
    char c;
    puts("请选择查询科目--1:Linux  2：C program  3:project");
    c=getchar();
    
    switch(c)
    {
        case '1':
             rankbyLinux(Shead);   
            break;
        case '2':
             rankbyC(Shead);
            break;
        case '3':
            rankbyProject(Shead);
            break;
        default:
           // puts("输入错误请重新输入");
            checkonerank(Shead);
    }

    return ;
}
//查看总排名
void checkallrank(pStu Shead)
{
    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无信息可排\n");
        return ;
    }
    
    pStu temp=Shead->next;
    for(;temp!=NULL;temp=temp->next)
    {
        temp->sum=temp->g_lin+temp->g_c+temp->g_pro;
    }
    int i;
    int length=getStuLength(Shead);
    pStu p=Shead->next;
    for (i=0; i<length-1; i++)
    {
        for (p=Shead->next;p->next!=NULL;p=p->next)
        {
            if(p->sum < p->next->sum)
            {
                
                Account data =p->data;
                int temp=p->g_lin;
                int temp1=p->g_c;
                int temp2=p->g_pro;
                int temp3=p->sum;
                
                p->data=p->next->data;
                p->g_lin=p->next->g_lin;
                p->g_c=p->next->g_c;
                p->g_pro=p->next->g_pro;
                p->sum=p->next->sum;
                
                p->next->data=data;
                p->next->g_lin=temp;
                p->next->g_c=temp1;
                p->next->g_pro=temp2;
                p->next->sum=temp3;
                
            
            }
        }
    }
    printf(" 姓 名    \tall_r  \t\t排名\n");
    temp=Shead->next;
    i=0;
    for(;temp!=NULL;temp=temp->next)
    {   
            i++;
        printf(" %s\t\t%d\t\t%d\n",temp->data.name,temp->sum,i);
    }
    sleep(5);

    return ;
}

void rankbyLinux(pStu Shead)
{

    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无信息可排\n");
        return ;
    }
    int i;
    int length=getStuLength(Shead);
    pStu p=Shead->next;
    for (i=0; i<length-1; i++)
    {
        for (p=Shead->next;p->next!=NULL;p=p->next)
        {
            if(p->g_lin < p->next->g_lin)
            {   
                Account data =p->data;
                int temp=p->g_lin;
                int temp1=p->g_c;
                int temp2=p->g_pro;
                int temp3=p->sum;
                
                p->data=p->next->data;
                p->g_lin=p->next->g_lin;
                p->g_c=p->next->g_c;
                p->g_pro=p->next->g_pro;
                p->sum=p->next->sum;
                
                p->next->data=data;
                p->next->g_lin=temp;
                p->next->g_c=temp1;
                p->next->g_pro=temp2;
                p->next->sum=temp3;
            
            }
        }
    }
    printf(" 姓 名    \tLinux    \t排名\n");
    pStu temp=Shead->next;
    i=0;
    for(;temp!=NULL;temp=temp->next)
    {   
            i++;
        printf(" %s\t\t%d\t\t%d\n",temp->data.name,temp->g_lin,i);
    }
    sleep(5);
    return ;
}


void rankbyC(pStu Shead)
{
    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无信息可排\n");
        return ;
    }
    int i;
    int length=getStuLength(Shead);
    pStu p=Shead->next;
    for (i=0; i<length-1; i++)
    {
        for (p=Shead->next;p->next!=NULL;p=p->next)
        {
            if(p->g_c < p->next->g_c)
            {   
                Account data =p->data;
                int temp=p->g_lin;
                int temp1=p->g_c;
                int temp2=p->g_pro;
                int temp3=p->sum;
                
                p->data=p->next->data;
                p->g_lin=p->next->g_lin;
                p->g_c=p->next->g_c;
                p->g_pro=p->next->g_pro;
                p->sum=p->next->sum;
                
                p->next->data=data;
                p->next->g_lin=temp;
                p->next->g_c=temp1;
                p->next->g_pro=temp2;
                p->next->sum=temp3;
            
            }
        }
    }
    printf(" 姓 名    \tC_pra    \t排名\n");
    pStu temp=Shead->next;
    i=0;
    for(;temp!=NULL;temp=temp->next)
    {   
            i++;
        printf(" %s\t\t%d\t\t%d\n",temp->data.name,temp->g_c,i);
    }
    sleep(5);
    return ;
}
void rankbyProject(pStu Shead)
{
    if(Shead==NULL||Shead->next==NULL)
    {
        printf("无信息可排\n");
        return ;
    }
    int i;
    int length=getStuLength(Shead);
    pStu p=Shead->next;
    for (i=0; i<length-1; i++)
    {
        for (p=Shead->next;p->next!=NULL;p=p->next)
        {
            if(p->g_pro < p->next->g_pro)
            {   
                Account data =p->data;
                int temp=p->g_lin;
                int temp1=p->g_c;
                int temp2=p->g_pro;
                int temp3=p->sum;
                
                p->data=p->next->data;
                p->g_lin=p->next->g_lin;
                p->g_c=p->next->g_c;
                p->g_pro=p->next->g_pro;
                p->sum=p->next->sum;
                
                p->next->data=data;
                p->next->g_lin=temp;
                p->next->g_c=temp1;
                p->next->g_pro=temp2;
                p->next->sum=temp3;
            
            }
        }
    }
    printf(" 姓 名    \tproject  \t排名\n");
    pStu temp=Shead->next;
    i=0;
    for(;temp!=NULL;temp=temp->next)
    {   
            i++;
        printf(" %s\t\t%d\t\t%d\n",temp->data.name,temp->g_pro,i);
    }
    sleep(5);
    return ;
}
